/**
 * 
 */
package server.manual;

import java.util.Vector;

import comun.MyException;
import comun.constantes.TIPO_PERMISOS;

import persistencia.Persistencia;
import persistencia.dominio.Participante;
import persistencia.dominio.PermisoAcceso;
import persistencia.dominio.Recurso;
import persistencia.dominio.SubSeccion;
import server.Control;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author Leonardo Marmol - Nicolas Bettiol
 *
 */
public class ControlManual extends Control {

	private Persistencia persistencia = null;

	public ControlManual(Persistencia persistencia){
		this.setPersistencia(persistencia);
	}

	/**
	 * @param persistencia the persistencia to set
	 */
	public void setPersistencia(Persistencia persistencia) {
		this.persistencia = persistencia;
	}

	/**
	 * @return the persistencia
	 */
	public Persistencia getPersistencia() {
		return persistencia;
	}

	public Vector obtenerRecursos(Long idAula, Long idPersona){
		Vector resultado = new Vector();
		Long idTipoUsuario = this.getIdTipoUsario(idAula,idPersona);
		
		try {
			PermisoAcceso pa = new PermisoAcceso();
			String filtro = "tipoUsuario.id == "+idTipoUsuario+
	           " & aula.id == "+idAula+ " & tipoPermiso.descripcion != \""+TIPO_PERMISOS.NINGUNO+"\"";
			Vector permisoAcceso = persistencia.getObjectosPorClaseYFiltro
            ("persistencia.dominio.PermisoAcceso",filtro);
			for (int i = 0; i < permisoAcceso.size(); i++) {
				pa = (PermisoAcceso) permisoAcceso.get(i);
				resultado.add(pa.getRecurso());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return resultado;
	}

	public Long getIdTipoUsario(Long idAula, Long idPersona){
		Participante participante = null;
		try {
			String filtro="persona.id == "+idPersona+
		           " & aula.id == "+idAula;
			Vector participantes = persistencia.getObjectosPorClaseYFiltro
            ("persistencia.dominio.Participante",filtro);
			if(!participantes.isEmpty()) 
				participante = (Participante)participantes.elementAt(0);
	 	   	else return null;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return participante.getTipoUsuario().getId();

	}

	public Vector subSecciones(Long idAula, Long idPersona) {
		Vector subSeccion = new Vector();
		Vector recursos = this.obtenerRecursos(idAula, idPersona);
		Recurso re = new Recurso();
	    for (int i = 0; i < recursos.size(); i++) {
	    	re = (Recurso)recursos.get(i);
	    	if (this.obtenerSubSecciones(re.getId())!= null){ 
	    		subSeccion.addAll(this.obtenerSubSecciones(re.getId()));
	    	}
		}
		return subSeccion;
	}

	private Vector obtenerSubSecciones(Long idRecurso) {
		Vector subSecciones = new Vector();
		String filtro="recurso.id == "+idRecurso;
		try {
			subSecciones = persistencia.getObjectosPorClaseYFiltro
			("persistencia.dominio.SubSeccion",filtro);
			if(subSecciones.isEmpty()) 
				return null;
	 	} catch (Exception e) {
			e.printStackTrace();
		}
		return subSecciones;
	}



}